The present invention relates generally to the field of emulated firmware, and more particularly to the testing of emulated firmware.
In the field of computing and electronics, firmware can be described as the “control program” that is used to control electronic or computing devices (that is, “hardware”), in devices where the device's own control program is embedded in the hardware. Firmware is usually stored in non-volatile memory, such as flash memory or ROM (read only memory), and can be described as being semi-permanent, that is, it remains intact unless updated by an outside firmware update program.
In emulation generally, one piece of hardware and/or software imitates, or simulates another piece of hardware and/or software. Firmware emulation is also known. For example, it is useful to use emulation to run the firmware of a flash SSD (solid-state drive) inside of an emulated environment, which allows a greater flexibility of running specific scenarios such as preconditioning wear or error injection. Current methods of emulating a device, or firmware that runs on a device, utilize methods of emulation which run the emulated firmware in a “sandbox” (closed environment). In other words, in an emulated environment, the firmware runs, even though its target device is not present because software emulates all interactions that the firmware would normally have with the target device in which the firmware is designed to be embedded. For purposes of this document, “firmware” shall still be referred to as “firmware” even when it is running in an emulated environment.
Filesystem in Userspace (FUSE) is an operating system mechanism for Unix-like computer operating systems that lets non-privileged users create their own file systems without editing kernel code by running file system code in user space while the FUSE module provides only a kind of “bridge” to the actual interfaces of the kernel computational resources. A commonly used FUSE implementation, is implemented as a loadable kernel module. FUSE is useful for writing virtual file systems. Unlike traditional file systems that essentially save data to and retrieve data from disk, virtual filesystems do not actually store data themselves. Rather, they act as a view or translation of an existing file system or storage device. In principle, any resource available to a FUSE implementation can be exported as a file system.
CUSE (character devices in userspace) is a kernel module for Unix systems that allows character devices, such as USB devices, keyboards, mice, or other devices with serial data transmission from user-space, to create applications. The CUSE module is based on FUSE.
A RAW (sometimes also called “raw”) device is a special kind of block device file that allows accessing a storage device such as a hard disk drive directly, bypassing the operating system's caches and buffers (although hardware caches may still be used). Applications like a database management system can use raw devices directly, enabling the database management system to manage how data is cached, rather than deferring this task to the operating system.